#ifndef QTEXTEDITAPPENDER_H
#define QTEXTEDITAPPENDER_H


#include <QTextEdit>
#include <QRecursiveMutex>
#include "baseappender.h"

class QTextEditAppender : public BaseAppender
{
    Q_OBJECT
public:
    explicit QTextEditAppender(LogLevel level = LogLevel::Debug,
                               QTextEdit* textEdit = nullptr);


    void setTextEdit(QTextEdit* textEdit);// 设置输出目标QTextEdit
    void setLevelColor(LogLevel level, const QColor& color);// 动态设置日志级别的颜色（支持实时生效）
    void setMaxLines(int maxLines);// 设置最大显示行数（0表示无限制）
    void append(LogLevel level, const QString& msg) override;// 重写append：输出日志到QTextEdit（线程安全）

private slots:
    void doAppend(const QString& htmlMsg, int currentLines, int maxLines);// 实际执行日志追加（确保在UI线程调用）

private:
    QTextEdit* m_textEdit;                 // 输出目标组件
    QMap<LogLevel, QColor> m_levelColors;  // 日志级别-颜色映射
    int m_maxLines;                        // 最大显示行数
    int m_currentLines;                    // 当前行数
    QRecursiveMutex  m_mutex;  // 改为递归互斥锁
};

#endif // QTEXTEDITAPPENDER_H
